﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "ISurface.h"

namespace gcmp
{
    class Coordinate3d;
    class ICurve2d;
    /// \brief 圆锥面
    class IConicalSurface : public ISurface
    {
        DEFINE_CAST_DERIVED(gcmp::IConicalSurface, gcmp::ISurface);

    public:
        /// \brief  创建圆锥面
        /// \param[in] coord 坐标系
        /// \param[in] height 高度
        /// \param[in] rangeV V向参数域
        /// \param[in] pCurve2d 二维曲线
        /// \return  圆锥面
        GCMP_GEOMETRY_INTERFACE_EXPORT static OwnerPtr<IConicalSurface> Create(
            const gcmp::Coordinate3d& coord,
            double height,
            const gcmp::Intervald& rangeV,
            const gcmp::ICurve2d* pCurve2d
        );

        /// \brief  获取坐标系
        virtual gcmp::Coordinate3d GetCoordinate()const = 0;

        /// \brief  获取高度
        virtual double GetHeight()const = 0;

        /// \brief  获取二维曲线
        virtual OwnerPtr<ICurve2d> GetCurve2d()const = 0;
    public:
        virtual ~IConicalSurface() = default;
    };
}
